<!-- 
    异步：定时器，事件，ajax中的回调函数
 -->

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul class="nav">
        <li>榴莲</li>
        <li>臭豆腐</li>
        <li>牌鱼罐头</li>
        <li>大猪笛子</li>
    </ul>

    <script>
        //闭包应用-3秒钟之后，打印所有的li元素内容
        //for是同步函数，定时器是异步的，所以没办法一起同步
        var lis = document.querySelector('.nav').querySelectorAll('li');
        // for (var i = 0; i < lis.length; i++) {
        //     (function (i) {
        //         setTimeout(function () {
        //             console.log(lis[i].innerHTML);
        //         }, 3000)
        //     })
        //    }
        //上面的程序会报错，因为同步(即循环)会先执行，异步任务在同步执行完成后被
        //推入主线程执行，所以i先循环到停止，定时器在执行，找不到索引4就报错了。


        for (var i = 0; i < lis.length; i++) {
            (function (i) {
                setTimeout(function () {
                    console.log(lis[i].innerHTML);
                }, 3000)
            })(i);
        }
        //循环是同步，定时器是异步，先执行同后异步，训话0,1,2,3定时器才会开启
    </script>
</body>

</html>